﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WowTourGuideTranslator
{
    /// <summary>
    /// Language prefixes of wowhead
    /// </summary>
    static class Language
    {
        /// <summary>
        /// www
        /// </summary>
        public const string English = @"www";

        /// <summary>
        /// french
        /// </summary>
        public const string French = @"fr";

        /// <summary>
        /// spanish
        /// </summary>
        public const string Spanish = @"es";
        
        /// <summary>
        /// german
        /// </summary>
        public const string German = @"de";
        
        /// <summary>
        /// russian
        /// </summary>
        public const string Russian = @"ru";
    }

    /// <summary>
    /// Types of wowhead requests
    /// </summary>
    static class RequestType
    {
        /// <summary>
        /// item request
        /// </summary>
        public const string Item = @"item";
        /// <summary>
        /// Quest request
        /// </summary>
        public const string Quest = @"quest";
        /// <summary>
        /// spell request
        /// </summary>
        public const string Spell = @"spell";
        /// <summary>
        /// achivement request
        /// </summary>
        public const string Achievement = @"achievement";
        /// <summary>
        /// NPC request
        /// </summary>
        public const string Npc = @"npc";
    }

    /// <summary>
    /// Types of actions
    /// </summary>
    static class ActionType
    {
        /// <summary>
        /// A   ACCEPT
        /// </summary>
        public const string ACCEPT = @"A";
        /// <summary>
        /// C   COMPLETE
        /// </summary>
        public const string COMPLETE = @"C";
        /// <summary>
        /// T   TURNIN
        /// </summary>
        public const string TURNIN = @"T";
        /// <summary>
        /// K   KILL
        /// </summary>
        public const string KILL = @"K";
        /// <summary>
        /// R   RUN
        /// </summary>
        public const string RUN = @"R";
        /// <summary>
        /// H   HEARTH
        /// </summary>
        public const string HEARTH = @"H";
        /// <summary>
        /// h   SETHEARTH
        /// </summary>
        public const string SETHEARTH = @"h";
        /// <summary>
        /// F   FLY
        /// </summary>
        public const string FLY = @"F";
        /// <summary>
        /// f   GETFLIGHTPOINT
        /// </summary>
        public const string GETFLIGHTPOINT = @"f";
        /// <summary>
        /// N   NOTE
        /// </summary>
        public const string NOTE = @"N";
        /// <summary>
        /// B   BUY
        /// </summary>
        public const string BUY = @"B";
        /// <summary>
        /// b   BOAT
        /// </summary>
        public const string BOAT = @"b";
        /// <summary>
        /// U   USE
        /// </summary>
        public const string USE = @"U";

        /// <summary>
        /// set with all possible action types
        /// </summary>
        public static HashSet<string> actionTypes = new HashSet<string>();

        /// <summary>
        /// Initializes the <see cref="ActionType"/> class.
        /// </summary>
        static ActionType()
        {
            actionTypes.Add(@"A");
            actionTypes.Add(@"C");
            actionTypes.Add(@"T");
            actionTypes.Add(@"K");
            actionTypes.Add(@"R");
            actionTypes.Add(@"H");
            actionTypes.Add(@"h");
            actionTypes.Add(@"F");
            actionTypes.Add(@"f");
            actionTypes.Add(@"N");
            actionTypes.Add(@"B");
            actionTypes.Add(@"b");
            actionTypes.Add(@"U");
        }

        /// <summary>
        /// Gets the action types.
        /// </summary>
        /// <value>The action types.</value>
        public static HashSet<string> ActionTypes
        {
            get
            {
                return actionTypes;
            }
        }
    }

    /// <summary>
    /// Types of action tags
    /// </summary>
    static class TagType
    {
        /// <summary>
        /// set with all possible action types
        /// </summary>
        public static HashSet<string> tagTypes = new HashSet<string>();

        /// <summary>
        /// N note
        /// </summary>
        public const string Note = @"N";
        /// <summary>
        /// QID quest id
        /// </summary>
        public const string QuestId = @"QID";
        /// <summary>
        /// O Optional
        /// </summary>
        public const string Optional = @"O";
        /// <summary>
        /// U use
        /// </summary>
        public const string Use = @"U";
        /// <summary>
        /// PRE Prerequsite
        /// </summary>
        public const string Prerequsite = @"PRE";
        /// <summary>
        /// Z Zone
        /// </summary>
        public const string Zone = @"Z";
        /// <summary>
        /// T Town
        /// </summary>
        public const string Town = @"T";
        /// <summary>
        /// QO Quest objective
        /// </summary>
        public const string QuestObjective = @"QO";
        /// <summary>
        /// Q
        /// </summary>
        public const string Quest = @"Q";
        /// <summary>
        /// L Loot
        /// </summary>
        public const string Loot = @"L";
        /// <summary>
        /// C Class
        /// </summary>
        public const string Class = @"C";
        /// <summary>
        /// R Race
        /// </summary>
        public const string Race = @"R";
 
          
        /// <summary>
        /// Initializes the <see cref="TagType"/> class.
        /// </summary>
        static TagType()
        {
            tagTypes.Add(Note);
            tagTypes.Add(QuestId);
            tagTypes.Add(Optional);
            tagTypes.Add(Use);
            tagTypes.Add(Prerequsite);
            tagTypes.Add(Zone);
            tagTypes.Add(Town);
            tagTypes.Add(QuestObjective);
            tagTypes.Add(Quest);
            tagTypes.Add(Loot);
            tagTypes.Add(Class);
            tagTypes.Add(Race);
        }

        /// <summary>
        /// Gets the action types.
        /// </summary>
        /// <value>The action types.</value>
        public static HashSet<string> TagTypes
        {
            get
            {
                return tagTypes;
            }
        }
    }
}